﻿using System.Collections.Generic;
using System.Linq;

namespace RadaCode.SwissKnife.Random
{
    public static class RandomNamePicker
    {
        private static List<string> _goodWords;

        static RandomNamePicker()
        {
            _goodWords = new List<string>(GetGoodWords());
        }

        public static string GetRandomName()
        {
            var rnd = new MersenneTwister();
            return _goodWords.OrderBy(x => rnd.Next(0, _goodWords.Count)).FirstOrDefault();
        }

        private static IEnumerable<string> GetGoodWords()
        {
            yield return "Max";
            yield return "Active";
            yield return "Admirable";
            yield return "Adore";
            yield return "Agree";
            yield return "Alert";
            yield return "A1";
            yield return "Alive";
            yield return "Amazing";
            yield return "Appealing";
            yield return "Approval";
            yield return "Aroma";
            yield return "Attraction";
            yield return "Award";
            yield return "Bargain";
            yield return "Beaming";
            yield return "Beats";
            yield return "Beautiful";
            yield return "Best";
            yield return "Better";
            yield return "Bits";
            yield return "Boost";
            yield return "Bounce";
            yield return "Breakthrough";
            yield return "Breezy";
            yield return "Brief";
            yield return "Bright";
            yield return "Brilliant";
            yield return "Brimming";
            yield return "Buy";
            yield return "Care";
            yield return "Certain";
            yield return "Charming";
            yield return "Chic";
            yield return "Choice";
            yield return "Clean";
            yield return "Clear";
            yield return "Colourful";
            yield return "Comfy";
            yield return "Compliment";
            yield return "Confidence";
            yield return "Connoisseur";
            yield return "Cool";
            yield return "Courteous";
            yield return "Coy";
            yield return "Creamy";
            yield return "Crisp";
            yield return "Cuddly";
            yield return "Dazzling";
            yield return "Debonair";
            yield return "Delicate";
            yield return "Delicious";
            yield return "Delightful";
            yield return "Deluxe";
            yield return "Dependable";
            yield return "Desire";
            yield return "Diamond";
            yield return "Difference";
            yield return "Dimple";
            yield return "Discerning";
            yield return "Distinctive";
            yield return "Divine";
            yield return "Dreamy";
            yield return "Drool";
            yield return "Dynamic";
            yield return "Easy";
            yield return "Economy";
            yield return "Ecstatic";
            yield return "Effervescent";
            yield return "Efficient";
            yield return "Endless";
            yield return "Energy";
            yield return "Enhance";
            yield return "Enjoy";
            yield return "Enormous";
            yield return "Ensure";
            yield return "Enticing";
            yield return "Essence";
            yield return "Essential";
            yield return "Exactly";
            yield return "Excellent";
            yield return "Exceptional";
            yield return "Exciting";
            yield return "Exclusive";
            yield return "Exhilaration";
            yield return "Exotic";
            yield return "Expert";
            yield return "Exquisite";
            yield return "Extol";
            yield return "Extra";
            yield return "Eye-catching";
            yield return "Fabled";
            yield return "Fair";
            yield return "Famous";
            yield return "Fantastic";
            yield return "Fashionable";
            yield return "Fascinating";
            yield return "Fab";
            yield return "Fast";
            yield return "Favourite";
            yield return "Fetching";
            yield return "Finest";
            yield return "Finesse";
            yield return "First";
            yield return "Fizz";
            yield return "Flair";
            yield return "Flattering";
            yield return "Flip";
            yield return "Flourishing";
            yield return "Foolproof";
            yield return "Forever";
            yield return "Fragrance";
            yield return "Free";
            yield return "Freshness";
            yield return "Friendly";
            yield return "Full";
            yield return "Fun";
            yield return "Galore";
            yield return "Generous";
            yield return "Genius";
            yield return "Gentle";
            yield return "Giggle";
            yield return "Glamorous";
            yield return "Glitter";
            yield return "Glorious";
            yield return "Glowing";
            yield return "Go-ahead";
            yield return "Golden";
            yield return "Goodness";
            yield return "Gorgeous";
            yield return "Graceful";
            yield return "Grand";
            yield return "Great";
            yield return "Guaranteed";
            yield return "Happy";
            yield return "Healthy";
            yield return "Heartwarming";
            yield return "Heavenly";
            yield return "Ideal";
            yield return "Immaculate";
            yield return "Impressive";
            yield return "Incredible";
            yield return "Inspire";
            yield return "Instant";
            yield return "Interesting";
            yield return "Invigorating";
            yield return "Invincible";
            yield return "Inviting";
            yield return "Irresistible";
            yield return "Jewel";
            yield return "Joy";
            yield return "Juicy";
            yield return "Keenest";
            yield return "Kind";
            yield return "Kissable";
            yield return "K.O.";
            yield return "Know-how";
            yield return "Leads";
            yield return "Legend";
            yield return "Leisure";
            yield return "Light";
            yield return "Lingering";
            yield return "Logical";
            yield return "Longest";
            yield return "Lovely";
            yield return "Lucky";
            yield return "Luscious";
            yield return "Luxurious";
            yield return "Magic";
            yield return "Matchless";
            yield return "Magnifies it";
            yield return "Maxi";
            yield return "Memorable";
            yield return "Mighty";
            yield return "Miracle";
            yield return "Modern";
            yield return "More";
            yield return "Mouthwatering";
            yield return "Multi";
            yield return "Munchy";
            yield return "Natural";
            yield return "Need";
            yield return "New";
            yield return "Nice";
            yield return "Nutritious";
            yield return "O.K.";
            yield return "Opulent";
            yield return "Outlasts";
            yield return "Outrageous";
            yield return "Outstanding";
            yield return "Palate";
            yield return "Palatial";
            yield return "Paradise";
            yield return "Pamper";
            yield return "Passionate";
            yield return "Peak";
            yield return "Pearl";
            yield return "Perfect";
            yield return "Pick-me-up";
            yield return "Pleasure";
            yield return "Pleases";
            yield return "Plenty";
            yield return "Plum";
            yield return "Plump";
            yield return "Plus";
            yield return "Popular";
            yield return "Positive";
            yield return "Power";
            yield return "Precious";
            yield return "Prefer";
            yield return "Prestige";
            yield return "Priceless";
            yield return "Pride";
            yield return "Prime";
            yield return "Prize";
            yield return "Protection";
            yield return "Proud";
            yield return "Pure";
            yield return "Quality";
            yield return "Quantity";
            yield return "Quenching";
            yield return "Quick";
            yield return "Quiet";
            yield return "Radiant";
            yield return "Ravishing";
            yield return "Real";
            yield return "Reap";
            yield return "Recommendation";
            yield return "Refined";
            yield return "Refreshing";
            yield return "Relax";
            yield return "Reliable";
            yield return "Renowned";
            yield return "Reputation";
            yield return "Rest";
            yield return "Rewarding";
            yield return "Rich";
            yield return "Right";
            yield return "Rosy";
            yield return "Royal";
            yield return "Safety";
            yield return "Save";
            yield return "Satisfaction";
            yield return "Scores";
            yield return "Seductive";
            yield return "Select";
            yield return "Sensitive";
            yield return "Sensational";
            yield return "Serene";
            yield return "Service";
            yield return "Sexy";
            yield return "Shapely";
            yield return "Share";
            yield return "Sheer";
            yield return "Shy";
            yield return "Silent";
            yield return "Silver";
            yield return "Simple";
            yield return "Singular";
            yield return "Sizzling";
            yield return "Skilful";
            yield return "Slick";
            yield return "Smashing";
            yield return "Smiles";
            yield return "Solar";
            yield return "Smooth";
            yield return "Soft";
            yield return "Sound";
            yield return "Sparkling";
            yield return "Special";
            yield return "Spectacular";
            yield return "Speed";
            yield return "Spicy";
            yield return "Splendid";
            yield return "Spice";
            yield return "Spotless";
            yield return "Spruce";
            yield return "Star";
            yield return "Strong";
            yield return "Stunning";
            yield return "Stylish";
            yield return "Subtle";
            yield return "Success";
            yield return "Succulent";
            yield return "Sun";
            yield return "Superb";
            yield return "Superlative";
            yield return "Supersonic";
            yield return "Supreme";
            yield return "Sure";
            yield return "Sweet";
            yield return "Swell";
            yield return "Symphony";
            yield return "Tan";
            yield return "Tangy";
            yield return "Tasty";
            yield return "Tempting";
            yield return "Terrific";
            yield return "Thoroughbred";
            yield return "Thrilling";
            yield return "Thriving";
            yield return "Timeless";
            yield return "Tingle";
            yield return "Tiny";
            yield return "Top";
            yield return "Totally";
            yield return "Traditional";
            yield return "Transformation";
            yield return "Treat";
            yield return "Treasure";
            yield return "Trendy";
            yield return "TRUE";
            yield return "Trust";
            yield return "Ultimate";
            yield return "Ultra";
            yield return "Unbeatable";
            yield return "Unblemished";
            yield return "Undeniably";
            yield return "Undoubtedly";
            yield return "U";
            yield return "Unique";
            yield return "Unquestionnably";
            yield return "Unrivalled";
            yield return "Unsurpassed";
            yield return "Valued";
            yield return "Valuable";
            yield return "Vanish";
            yield return "Varied";
            yield return "Versatile";
            yield return "Victor";
            yield return "Vigorous";
            yield return "Vintage";
            yield return "V.I.P.";
            yield return "Vital";
            yield return "Vivacious";
            yield return "Warm";
            yield return "Wealth";
            yield return "Wee";
            yield return "Whiz";
            yield return "Whole";
            yield return "Whopper";
            yield return "Winner";
            yield return "Wise";
            yield return "Wonderful";
            yield return "Worthy";
            yield return "Wow!";
            yield return "Youthful";
            yield return "Yule";
            yield return "Young";
            yield return "Zap";
            yield return "Zeal";
            yield return "Zest";
            yield return "Zip";
            yield return "Zoom";
            yield return "101";
            yield return "1990s";
            yield return "20th Century";
            yield return "Mmmm";
            yield return "Sshhhh!";
            yield return "Top of the Pops/ Crops /Hops";
            yield return "It refreshes the... other.... cannnot reach";
            yield return "SOS";
            yield return "A step ahead";
            yield return "A racing start";
            yield return "Growing demand";
            yield return "Take the biscuit";
            yield return "On the right foot";
            yield return "Softly, softly";
            yield return "Making an impression";
            yield return "So-so";
            yield return "Maximum protection";
            yield return "Get up and glow";
            yield return "Stands supreme";
            yield return "The ultimate";
            yield return "Hi!";
            yield return "Star in its own right";
            yield return "An eye for bargains";
            yield return "Heaven scent";
            yield return "A shining examle";
            yield return "The bare necessities";
            yield return "Make the penny drop";
            yield return "Shoulder to cry on";
            yield return "Get it together";
            yield return "Really cool";
            yield return "The one";
            yield return "King of the";
            yield return "Goodness only knows";
            yield return "Easy as 1 2 3 (ABC)";
            yield return "Nothing to declare";
            yield return "Brightens up";
            yield return "Adds distinction";
            yield return "Goes without saying";
            yield return "The";
            yield return "No 1";
            yield return "Child's play";
            yield return "Sounds good";
            yield return "Take pride";
            yield return "Take some beating";
            yield return "Set the pace";
            yield return "Sky high";
            yield return "Second to none";
            yield return "Save a packet";
            yield return "Rest easy";
            yield return "Run for my money";
            yield return "It's 'in'";
            yield return "Pole position";
            yield return "Perfect combination";
            yield return "On my wavelength";
            yield return "Just like that";
            yield return "All systems";
            yield return "Mint condition";
            yield return "Make dreams come true";
            yield return "Make my day";
            yield return "Knock spots off";
            yield return "5 star";
            yield return "Extend your scope";
            yield return "Down to a fine art";
            yield return "Does the trick";
            yield return "Draws me back";
            yield return "Think ahead";
        }
    }
}
